// v2_jwt/handlers/user_handlers.go
package handlers

import (
	"database/sql"
	// "errors"
	"grpc-jwt-yonghurenzheng/v2.2_jwt/config"
	"grpc-jwt-yonghurenzheng/v2.2_jwt/models"
	"net/http"

	"github.com/gin-gonic/gin"
)

// Profile 获取用户信息 (受JWT保护)
// 定义用于从 context 获取 claims 的 key
// type contextKey string
// const userClaimsKey = contextKey("userClaims")
// Profile 获取当前登录用户的信息 (需要认证)
func Profile(g *gin.Context) {
	claimsInterface, exists := g.Get("userClaims")
    if !exists {
        g.JSON(http.StatusUnauthorized, gin.H{"error": "无法从 Token 中获取用户信息"})
        return
    }
    claims := claimsInterface.(*models.Claims)

	var user models.User
	err:=config.DB.QueryRow("select id,username,email from users where id = ?",claims.UserID).
	Scan(&user.ID,&user.Username,&user.Email)

	if err!=nil{
		if err==sql.ErrNoRows{
			g.JSON(http.StatusNotFound, gin.H{"error": "用户不存在"})
			return 
		}
		g.JSON(http.StatusInternalServerError, gin.H{"error": "查询用户信息失败: " + err.Error()})
		return 
	}
    g.JSON(http.StatusOK, gin.H{
        "message":  "获取用户信息成功",
        "user_id":  claims.UserID,
        "username": claims.Username,
		"email":    user.Email,
    })
}

// 注销用户
// DeleteUser 删除当前登录的用户账号 (需要认证)
func DeleteUser(g *gin.Context) {
	// 同样，从 context 中获取用户信息，确保用户只能删除自己
	claimsInterface, exists := g.Get("userClaims")
    if !exists {
        g.JSON(http.StatusUnauthorized, gin.H{"error": "无法从 Token 中获取用户信息"})
        return
    }
    claims := claimsInterface.(*models.Claims)

	// 获取用户ID，准备从数据库删除
	userIDToDelete := claims.UserID

	// 执行删除操作
	// 建议在实际项目中开启事务来保证数据一致性
	_, err := config.DB.Exec("DELETE FROM users WHERE id = ?", userIDToDelete)
	if err != nil {
		g.JSON(http.StatusInternalServerError,gin.H{"error":"删除用户失败"+err.Error()})
		return
	}
	g.JSON(http.StatusOK,gin.H{"message":  "您的账户已成功注销"})
}
